/**
* @fileOverview 游戏资源基类源文件
* @author <a href="http://sivory.my.phpcloud.com">Sivory</a>
* @version 0
*/

/**
* @class 游戏资源基类，它是所有可被加载的游戏资源的祖先类
* @param {Name.Sivory.Opensea.Game} host 游戏实例
* @id {String} 资源索引
* @author <a href="http://sivory.my.phpcloud.com">Sivory</a>
* @version 0
*/
Name.Sivory.Opensea.Resource=function(host,id)
{
	//建立游戏源的资源哈希表
	if (host.resource.indexes==null)
	{
		host.resource.indexes={};
		var resourcelist=OS_Resource.resourceDom.getElementsByTagName("resource")[0].childNodes;
		for (var i=0;i<resourcelist.length;i++)
		if (resourcelist[i].nodeType==1)
		{
			var key=resourcelist[i].getAttribute("id");
			if (!!key) OS_Resource.indexes[key]=resourcelist[i];
		}
	}
	
	//此资源若已存在，则什么都不做
	if (host.resource.containsKey(id)) return false;
	
	//为避免重复加载主角资源
	if (host.status.leadingRole!=null && host.status.leadingRole.id==id) return false;
	
	//将当前资源添加至资源管理器中
	host.resource.put(id,this);

	/**
	* @public
	* @field
	* @desciption 资源的索引
	* @since 0
	*/
	this.id=id;
	
	this.resourceNode=OS_Resource.indexes[id];
	if (this.resourceNode==null)
	{
		host.error("资源索引错误:"+id);
	}
	
	//遍历依赖项节点
	if (this.resourceNode.getElementsByTagName("dependency").length>0)
	{
		var childNodes = this.resourceNode.getElementsByTagName("dependency")[0].getElementsByTagName("item");
		for (var i=0;i<childNodes.length;i++)
		{
			var childNode = childNodes[i];
			var resType = childNode.getAttribute("type");
			var resID = childNode.childNodes[0].nodeValue;
			if (OS_Resource.Builder.containsKey(resType))
			{
				var resourceBuilder=OS_Resource.Builder.get(resType);
				new resourceBuilder(host,resID);
			}
			else
			{
				host.error("错误： 不支持的资源类型 ["+resType+"]");
			}
		}
	}
	
	this.loaded=false;
	
	this.load = function(successHandler)
	{
		host.error("错误：执行了一个应该被重载的函数");
	}
}
